#ifndef PROGRAMME_H
#define PROGRAMME_H

/*!
 * \file programme.h
 * \brief Classe qui contient le parser et le translater d'un fichier lobo
 * \author bruneau-hay
 * \version 0.1
 */

#include "programmecpp.h"

#include <stack>
#include "instructionsimple.h"
using namespace std;

class programme
{
//-----------------------------Attributs --------------------------------------------------
private:
	string nom_fic;/*Nom du fichier.lobo*/
	vector<fonction> vect_func; /*Vecteur qui contiendra des objets Fonction (dont la fonction principale main)*/
	bool silencieux; /*Si l'utilisateur choisit le mode silencieux*/
	bool valide; /*Valeur de validité du programme, si cette valeur est nulle à la fin du parsage le programme ne pourra pas être traduit*/

public :
	stringstream flux_erreur; /*Flux sur lequelle les erreurs sont écrites */
//-----------------------------------------------------------------------------------------
//-----------------------------Méthodes----------------------------------------------------
	/*!
     *  \brief Constructeur vide
     */
	programme();
	/*!
     *  \brief Constructeur
     *
     *  Constructeur d'un objet programme avec un nom et une valeur de silence
     *  lecture
     *
     *  \param nom : le nom du fichier
	 *  \param slt : silencieu ou pas
     */
	programme(string nom, bool slt=false);
	virtual ~programme();

	/*!
     *  \brief Parcours le fichier
     *
     *  Parcours du fichier et analyse des lignes
     */
	void parser(); //Parcours le fichier et crée les objets

	/*!
     *  \brief Ajout d'une fonction
     *
     *	\param F: la fonction à ajouter
     */
	void addFonction(const fonction& F);

	/*!
     *  \brief Traduction du programme
     *
     *  Traduction du programme, chaque fonction traduit ces instructions
	 * 	Création d'un programmecpp
	 * 
	 * 	\return le programmecpp généré
     */
	programmecpp translate();

	/*!
     *  \brief Affichage d'une fonction
     *
     *  Permet d'afficher la suite d'instruction d'une fonction
     */
	void afficheFonct(); //Permet d'afficher la suite d'instruction d'une fonction
//------------------------------------------------------------------------------------------
};



#endif // PROGRAMME_H
